package alibaba.ifelserefactor.demo01.test01;

import alibaba.ifelserefactor.demo01.ShareListener;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import static alibaba.ifelserefactor.demo01.ShareType.*;

/**
 * @author ChangLiang
 * @date 2020/4/20
 */
@Slf4j
public class ShareService {

    public void share (ShareItem item, ShareListener listener) {
        if (item != null) {
            /*  share方法的分支有15条，这意味着你每次回看代码得让自己的大脑变成微型的处理器，考虑15种情况。
                如果出现bug，你又得考虑15种情况，并15种情况都要测试下。
                再如果现在需要加多分享小视频功能，你又得添加多3个分支，还要改代码，一点都不“开放-闭合”。
                再再如果后面项目交接给他人跟进，他人又要把自己大脑变成处理器来想每个分支的作用，我敢肯定有百分之八十的人都会吐槽代码。
            */
            if (item.type == TYPE_LINK) {
                // 分享链接
                if (!StringUtils.isEmpty(item.link) &&StringUtils.isEmpty(item.title)) {
                    doShareLink(item.link, item.title, item.content, listener);
                } else {
                    if (listener != null) {
                        listener.onCallback(ShareListener.STATE_FAIL, "分享信息不完整");
                    }
                }
            } else if (item.type == TYPE_IMAGE) {
                // 分享图片
                if (!StringUtils.isEmpty(item.imagePath)) {
                    doShareImage(item.imagePath, listener);
                } else {
                    if (listener != null) {
                        listener.onCallback(ShareListener.STATE_FAIL, "分享信息不完整");
                    }
                }
            } else if (item.type == TYPE_TEXT) {
                // 分享文本
                if (!StringUtils.isEmpty(item.content)) {
                    doShareText(item.content, listener);
                } else {
                    if (listener != null) {
                        listener.onCallback(ShareListener.STATE_FAIL, "分享信息不完整");
                    }
                }
            } else if (item.type == TYPE_IMAGE_TEXT) {
                // 分享图文
                if (!StringUtils.isEmpty(item.imagePath) && !StringUtils.isEmpty(item.content)) {
                    doShareImageAndText(item.imagePath, item.content, listener);
                } else {
                    if (listener != null) {
                        listener.onCallback(ShareListener.STATE_FAIL, "分享信息不完整");
                    }
                }
            } else {
                if (listener != null) {
                    listener.onCallback(ShareListener.STATE_FAIL, "不支持的分享类型");
                }
            }
        } else {
            if (listener != null) {
                listener.onCallback(ShareListener.STATE_FAIL, "ShareItem 不能为 null");
            }
        }
    }

    private void doShareImageAndText(String imagePath, String content, ShareListener listener) {
        log.info("share image and text");
    }

    private void doShareText(String content, ShareListener listener) {
        log.info("share text");
    }

    private void doShareImage(String imagePath, ShareListener listener) {
        log.info("share image");
    }

    private void doShareLink(String link, String title, String content, ShareListener listener) {
        log.info("share link");
    }
}
